/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.dto.CatalogoParametroDto;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.CatalogoParametroManager;
import com.brain.core.manager.ParametroManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("catalogoParametroMBean")
@Scope("session")
public class CatalogoParametroMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(CatalogoParametroMBean.class);
    @Resource
    private CatalogoParametroManager manager;
    @Resource
    private ParametroManager mngParametro;
    @Resource
    private RecursosManager recursosManager;
    private List<CatalogoParametroDto> lista;
    private CatalogoParametroDto dto;
    private CatalogoParametroDto dtoFiltro;
    private String keyTitulo = "catalogo.parametro.panel";
    private ParametroDto parametroDto;
    private int accionParametro;
    private SelectItem[] siTipos;
    private List<ParametroDto> listaParametrosPadre;

    public CatalogoParametroMBean() {
        this.dtoFiltro = new CatalogoParametroDto();
    }

    public String iniciar() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new CatalogoParametroDto();
        return ConstantesCore.UrlNavegacion.URL_LISTA_CATALOGO_PARAMETRO;
    }

    public String nuevo() {
        sessionMBean().setAccion(ConstantesCore.Formulario.NUEVO);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        this.lista = new ArrayList<CatalogoParametroDto>();
        this.dto = this.manager.inicializar();
        this.parametroDto = this.mngParametro.inicializar();
        return ConstantesCore.UrlNavegacion.URL_CATALOGO_PARAMETRO;
    }
    
    public String editar() {
        sessionMBean().setAccion(ConstantesCore.Formulario.EDITAR);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        this.cargarDatosDialogDetalle();
        return ConstantesCore.UrlNavegacion.URL_CATALOGO_PARAMETRO;
    }

    public String ver() {
        sessionMBean().setAccion(ConstantesCore.Formulario.VER);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        this.cargarDatosDialogDetalle();
        return ConstantesCore.UrlNavegacion.URL_CATALOGO_PARAMETRO;
    }

    public void cargarDatosDialogDetalle() {
        //Cargamos los datos del dialog del detalle
        this.parametroDto = this.mngParametro.inicializar();
        this.accionParametro = ConstantesCore.Formulario.NUEVO;
    }

    public void buscar(ActionEvent ae) {
        try {
            this.lista = this.manager.obtenerCatalogos(dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
            showError(ex.getMessage());
        }

    }

    public String guardar() {
        this.parametroDto =  mngParametro.inicializar();
        if(this.manager.guardar(this.dto)!= null){
            this.editar();
        }
        return  "";
    }

    public String retroceder() {
        buscar(null);
        sessionMBean().setAccion(ConstantesCore.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesCore.UrlNavegacion.URL_LISTA_CATALOGO_PARAMETRO;
    }

    public String nuevoParametro() {
        this.accionParametro = ConstantesCore.Formulario.NUEVO;
        this.parametroDto =  mngParametro.inicializar();
        return "";
    }

    public String editarParametro() {
        this.accionParametro = ConstantesCore.Formulario.EDITAR;
        this.getListaParametrosPadre();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.PARAMETRO, this.parametroDto.getId());
        return "";
    }

    public String verParametro() {
        this.accionParametro = ConstantesCore.Formulario.VER;
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.PARAMETRO, this.parametroDto.getId());
        return "";
    }

    public String agregarParametro() {

        return this.mngParametro.guardar(this.parametroDto, this.accionParametro, this.dto);

    }

    public String retrocederParametro() {
        return ConstantesCore.UrlNavegacion.URL_CATALOGO_PARAMETRO;
    }

    public void cambioCatalogoParametro() {
        this.listaParametrosPadre = getListaParametrosPadre();
    }

    public int getAccionParametro() {
        return accionParametro;
    }

    public void setAccionParametro(int accionParametro) {
        this.accionParametro = accionParametro;
    }

    public ParametroDto getParametroDto() {
        return parametroDto;
    }

    public void setParametroDto(ParametroDto parametroDto) {
        this.parametroDto = parametroDto;
    }

    public SelectItem[] getSiTipos() {
        return this.recursosManager.siTiposParametro();
    }

    public void setSiTipos(SelectItem[] siTipos) {
        this.siTipos = siTipos;
    }

    public CatalogoParametroDto getDto() {
        return dto;
    }

    public void setDto(CatalogoParametroDto dto) {
        this.dto = dto;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<CatalogoParametroDto> getLista() {
        return lista;
    }

    public void setLista(List<CatalogoParametroDto> lista) {
        this.lista = lista;
    }

    public CatalogoParametroManager getManager() {
        return manager;
    }

    public void setManager(CatalogoParametroManager manager) {
        this.manager = manager;
    }

    public CatalogoParametroDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(CatalogoParametroDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public List<ParametroDto> getListaParametrosPadre() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(this.parametroDto.getCatalogoParametroPadreDto().getId());
    }

    public void setListaParametrosPadre(List<ParametroDto> listaParametrosPadre) {
        this.listaParametrosPadre = listaParametrosPadre;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }
}
